home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
09 Application Software
/
GC1.SDA
/
FILE MAINT
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2019-04-13
|
9KB
|
338 lines
10 REM FILE MAINTENANCE
20 REM WRITTEN BY KURT BRANDON
30 DEFFNDS(R)=(R-INT(R))
40 DN=PEEK(186):REM DRIVE ADDRESS
50 POKE53281,1:POKE646,0:POKE650,255:RT$=CHR$(13):D$="":S$="":M$="":I$=""
60 BF$=" "
70 PRINTCHR$(142)"[147]";
80 PRINT"[146] [144]ucccccccccccccccccccccccccci"
90 PRINT" b FILE MAINTENANCE PROGRAM b"
100 PRINT" b b"
110 PRINT" b FOR b"
120 PRINT" b b"
130 PRINT" b LATITUDE & LONGITUDE FILEb"
140 PRINT" jffffffffffffffffffffffffffk"
150 DIMOP$(300):Z$=CHR$(0)
160 FORI=49152TO49703:READA:POKEI,A:NEXT
170 DATA169,0,141,35,194,32,175,193,176,79,32,90,192,32,230,192,32
180 DATA120,193,32,139,193,32,158,192,32,250,192,173,33,194,208,3,76
190 DATA47,192,173,34,194,208,3,76,47,192,32,25,193,32,101,193,176
200 DATA3,76,22,192,173,19,194,133,3,173,20,194,133,4,173,35,194
210 DATA208,8,32,120,193,32,159,193,176,11,169,0,141,35,194,32,139
220 DATA193,76,22,192,96,160,4,177,251,141,18,194,24,165,251,105,5
230 DATA133,251,165,252,105,0,133,252,172,18,194,136,240,16,24,165,251
240 DATA105,2,133,251,165,252,105,0,133,252,136,208,240,56,165,251,233
250 DATA1,133,3,141,19,194,165,252,233,0,133,4,141,20,194,32,0
260 DATA226,142,39,194,96,173,21,194,141,23,194,141,25,194,173,22,194
270 DATA141,24,194,141,26,194,14,23,194,46,24,194,24,173,23,194,109
280 DATA25,194,141,23,194,173,24,194,109,26,194,141,24,194,24,165,3
290 DATA105,3,133,3,165,4,105,0,133,4,24,165,3,109,23,194,133
300 DATA5,165,4,109,24,194,133,6,96,160,1,177,251,141,27,194,141
310 DATA31,194,136,177,251,141,28,194,141,32,194,96,160,0,177,3,141
320 DATA33,194,177,5,141,34,194,200,177,3,133,98,177,5,133,100,200
330 DATA177,3,133,99,177,5,133,101,96,173,39,194,41,1,201,0,240
340 DATA4,32,233,193,96,160,0,177,98,209,100,144,23,208,22,200,204
350 DATA34,194,144,10,173,34,194,205,33,194,208,8,240,5,204,33,194
360 DATA144,227,96,169,1,141,35,194,32,79,193,96,160,0,177,3,153
370 DATA36,194,177,5,145,3,185,36,194,145,5,200,192,3,144,237,96
380 DATA206,29,194,208,3,206,30,194,173,30,194,201,255,240,2,24,96
390 DATA56,96,78,32,194,110,31,194,173,31,194,141,21,194,173,32,194
400 DATA141,22,194,96,56,173,27,194,237,21,194,141,29,194,173,28,194
410 DATA237,22,194,141,30,194,96,173,22,194,208,9,173,21,194,201,0
420 DATA208,2,56,96,24,96,165,47,164,48,133,251,132,252,32,139,176
430 DATA160,0,177,251,197,69,240,9,200,208,247,230,252,208,243,56,96
440 DATA200,208,2,230,252,177,251,197,70,208,230,192,0,208,2,198,252
450 DATA136,152,24,101,251,133,251,144,2,230,252,24,96,160,0,177,100
460 DATA209,98,144,23,208,22,200,204,33,194,144,10,173,33,194,205,34
470 DATA194,208,8,240,5,204,34,194,144,227,96,169,1,141,35,194,32
480 DATA79,193,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0
490 DATA0,0,0,0,0,0,0,0
500 FC$="A"
510 OPEN15,DN,15,"I0"
520 OPEN8,DN,8,FC$
530 RN=1:GOSUB1530
540 INPUT#8,MN
550 GOSUB1540
560 CLOSE8
570 PL$=STR$(MN):IFRN=1THENLA=0:LO=0
580 PRINT"[147]NUMBER OF FILE RECORDS:";MN
590 PRINT"[144]RECORD NUMBER";RN
600 PRINT"[144]PLACE: "PL$"[144]"
610 Q$="N":IFLA<0THENQ$="S"
620 PRINT"LATITUDE: "TAB(11)ABS(LA)TAB(24)Q$;:RV=LA
630 GOSUB3200:PRINTTAB(28)""RV$"[144]"
640 Q$="W":IFLO<0THENQ$="E"
650 PRINT"LONGITUDE: "TAB(11)ABS(LO)TAB(24)Q$;:RV=LO
660 GOSUB3200:PRINTTAB(28)""RV$"[144]"
670 GOSUB2660
680 POKE198,0
690 GETA$:IFA$=""THEN690
700 IFA$="[196]"THEND$="_":FJ=MN+-RN:GOSUB2660:GOSUB1230:GOSUB2810:GOTO580
710 IFA$="S"THENGOSUB1670:GOTO520
720 IFA$="+"ANDRN<MNTHENRN=RN+1:GOSUB2810:GOTO580
730 IFA$="-"ANDRN>1THENRN=RN-1:GOSUB2810:GOTO580
740 IFA$="Q"THENCLOSE8:CLOSE15:LOAD"MENU",DN
750 IFNS=1THENNS=0:GOSUB2810:GOTO580
760 IFA$="V"THENSV=RN:INPUT"WHAT RECORD NUMBER";RN:GOSUB2810:GOTO580
770 IFA$="E"THENGOSUB1780:GOSUB2810:GOTO580
780 IFA$<>"C"THEN820
790 INPUT"FIRST LETTER";FC$:FC$=LEFT$(FC$,1)
800 IFFC$<"A"ORFC$>"Z"THENPRINT"[145][145]":GOTO790
810 GOTO520
820 IFA$="I"THENI$="_":GOSUB2660:GOSUB2280:GOSUB2810:GOTO580
830 GOTO690
840 CLOSE8:OPEN8,DN,8,FC$
850 PRINT"";
860 FORL=2TOMN-1
870 PRINT"[145] [157][157][157][157][157]"INT(100*(L/(MN-1)));
880 PRINT"% DONE"
890 RN=L
900 GOSUB1530
910 INPUT#8,LV$,A1,O1
920 A1$=STR$(A1):O1$=STR$(O1)
930 SV$=LV$
940 GOSUB1540
950 LR=0
960 FORN=L+1TOMN
970 RN=N
980 GOSUB1530
990 INPUT#8,PL$,W$,Y$:W=VAL(W$):Y=VAL(Y$)
1000 GOSUB1540
1010 IFPL$<SV$THENLR=RN:SV$=PL$
1020 NEXTN
1030 IFLR=0THEN1170
1040 RN=LR
1050 GOSUB1530
1060 INPUT#8,PL$,A2$,O2$:A2=VAL(A2$):O2=VAL(O2$)
1070 A2$=STR$(A2):O2$=STR$(O2)
1080 GOSUB1540
1090 RC$=LV$+RT$+A1$+RT$+O1$
1100 PRINT#8,RC$;
1110 GOSUB1540
1120 RN=L:RC$=""
1130 GOSUB1530
1140 RC$=PL$+RT$+A2$+RT$+O2$
1150 PRINT#8,RC$;
1160 GOSUB1540
1170 NEXTL
1180 S$="":CLOSE8:GOSUB2660:RETURN
1190 :
1200 :
1210 :
1220 REM\ DELETE ENTRY SUB
1230 CLOSE8
1240 PRINT"";
1250 IFRN=1THENPRINT"[145]FILE POINTER RECORD![144]":D$="":RETURN
1260 OPEN8,DN,8,FC$
1270 CR=RN:FORBG=CRTOMN
1280 PRINT"[145] [157][157][157][157][157]"INT(100*((BG-CR)/((MN-CR)-(MN=CR))));
1290 PRINT"% DONE[144]"
1300 RN=BG+1
1310 IFRN>MNTHEN1420
1320 GOSUB1530:REM CALCULATE POINTER
1330 INPUT#8,PL$,LA$,LO$:LA=VAL(LA$):LO=VAL(LO$)
1340 GOSUB1550:REM CHK ERR CHAN
1350 GOSUB1540:REM POSITION
1360 LA$=STR$(LA):LO$=STR$(LO)
1370 RC$=PL$+RT$+LA$+RT$+LO$
1380 RN=BG
1390 GOSUB1530:GOSUB1530
1400 PRINT#8,RC$;
1410 GOSUB1540
1420 NEXT
1430 RN=1:MN=MN-1
1440 GOSUB1530
1450 MN$=STR$(MN):RC$=MN$+RT$
1460 PRINT#8,RC$;
1470 GOSUB1540
1480 D$="":RN=CR:CLOSE8:GOSUB2660:RETURN
1490 :
1500 :
1510 :
1520 REM\ POSITION & ERROR SUB
1530 RH=INT(RN/256):RL=RN-(256*RH)
1540 PRINT#15,"P"+CHR$(96+8)+CHR$(RL)+CHR$(RH)+CHR$(1)
1550 INPUT#15,E,E$,A,B
1560 IFE=0THENRETURN
1570 IFE=50THEN RETURN
1580 PRINT"I/O ERROR"
1590 PRINT"ERROR NUMBER IS";E,E$
1600 PRINT"AT TRACK";A;" SECTOR";B
1610 CLOSE8:CLOSE15:END
1620 :
1630 :
1640 :
1650 :
1660 REM\ SORT FILE RECORDS SUB
1670 OP$(0)=Z$:OP$(1)=Z$:FORI=2TO300:OP$(I)="":NEXT
1680 OPEN8,DN,8,FC$:RN=1:GOSUB1530:GOSUB1540:INPUT#8,MN
1690 FORRN=2TOMN:GOSUB1530:GOSUB1540:INPUT#8,PL$,LA$,LO$
1700 OP$(RN)=PL$+RT$+LA$+RT$+LO$:NEXT
1710 SYS49152OP$(1),2
1720 FORRN=2TOMN:GOSUB1530:GOSUB1540
1730 PRINT#8,OP$(RN);:NEXT:CLOSE8:RETURN
1740 :
1750 :
1760 :
1770 REM\ EDIT SUB
1780 CE=0:BL=10:NL=10:PRINT"[147]PLACE: "PL$
1790 Q$="N":IFLA<0THENQ$="S"
1800 PRINT"LATITUDE: "TAB(12)LATAB(24)Q$;:RV=LA
1810 GOSUB3200:PRINTTAB(28)""RV$"[144]"
1820 Q$="W":IFLO<0THENQ$="E"
1830 PRINT"LONGITUDE: "TAB(12)LOTAB(24)Q$;:RV=LO
1840 GOSUB3200:PRINTTAB(28)""RV$"[144]"
1850 PRINT" - RECORD NOW IN FILE -"
1860 INPUT"CHANGE PLACE NAME N[157][157][157]";CH$
1870 IFCH$<>"N"ANDCH$<>"Y"THENPRINT"[145][145]":GOTO1860
1880 IFCH$="N"THENPQ$=PL$:GOSUB3300:GOTO1960
1890 CE=1:INPUT"PLACE:";PQ$
1900 IFLEN(PQ$)<=30THEN1930
1910 PRINT"MORE THAN 30 CHARACTERS":FORI=1TO900:NEXT
1920 GOSUB3300:GOTO1890
1930 IFLEFT$(PQ$,1)=" "THENPQ$=RIGHT$(PQ$,LEN(PQ$)-1):GOTO1930
1940 IFLEN(PQ$)<30THENPQ$=PQ$+LEFT$(BF$,30-LEN(PQ$))
1950 GOSUB3300
1960 SA=LA:INPUT"CHANGE LATITUDE? N[157][157][157]";CH$
1970 IFCH$<>"N"ANDCH$<>"Y"THENPRINT"[145][145]":GOTO1960
1980 IFCH$="N"THENGOSUB3300:GOTO2000
1990 CE=1:PRINT"LATITUDE":GOSUB2910:IF NV=1THENSA=RV
2000 SA$=STR$(SA):SA$=SA$+LEFT$(BF$,11-LEN(SA$))
2010 GOSUB3300
2020 SO=LO:INPUT"CHANGE LONGITUDE N[157][157][157]";CH$
2030 IFCH$<>"N"ANDCH$<>"Y"THENPRINT"[145][145]":GOTO2020
2040 IFCH$="N"THENGOSUB3300:GOTO2060
2050 CE=1:SO=LO:PRINT"LONGITUDE":GOSUB2910:IF NV=1THENSO=RV
2060 SO$=STR$(SO):SO$=SO$+LEFT$(BF$,11-LEN(SO$))
2070 PRINT:PRINT:PRINT"PLACE: "PQ$
2080 Q$="N":IFVAL(SA$)<0THENQ$="S"
2090 PRINT"LATITUDE: "TAB(12)SA$TAB(24)Q$;:RV=VAL(SA$)
2100 GOSUB3200:PRINTTAB(28)""RV$"[144]"
2110 Q$="W":IFVAL(SO$)<0THENQ$="E"
2120 PRINT"LONGITUDE: "TAB(12)SO$TAB(24)Q$;:RV=VAL(SO$)
2130 GOSUB3200:PRINTTAB(28)""RV$"[144]"
2140 PRINT"[144]-- IS THIS INFORMATION CORRECT (Y/N)? --"
2150 GETA$:IFA$<>"Y"ANDA$<>"N"THEN2150
2160 IFA$="N"THEN1780
2170 IFCE=0THENRETURN
2180 RC$=PQ$+RT$+SA$+RT$+SO$
2190 OPEN8,DN,8,FC$
2200 GOSUB1530
2210 PRINT#8,RC$;
2220 GOSUB1550:GOSUB1540
2230 CLOSE8:RETURN
2240 :
2250 :
2260 :
2270 REM\ INSERT RECORD SUB
2280 OPEN8,DN,8,FC$
2290 TN=RN:FORXD=MNTOTNSTEP-1
2300 PRINT"";
2310 PRINTINT(100*((MN-XD)/(MN-TN-(MN=TN))))" % DONE"
2320 RN=XD
2330 GOSUB1530
2340 INPUT#8,PL$,LA$,LO$:LA=VAL(LA$):LO=VAL(LO$)
2350 GOSUB1550
2360 GOSUB1540
2370 LA$=STR$(LA):LO$=STR$(LO)
2380 RC$=PL$+RT$+LA$+RT$+LO$
2390 RN=XD+1
2400 GOSUB1530
2410 PRINT#8,RC$;
2420 GOSUB1550
2430 GOSUB1540
2440 NEXT
2450 MN=MN+1
2460 RN=1
2470 GOSUB1530
2480 MN$=STR$(MN)
2490 RC$=MN$+RT$
2500 PRINT#8,RC$;
2510 GOSUB1550
2520 RN=TN
2530 PL$=" ":LO=0:LA=0
2540 LA$=STR$(LA):LO$=STR$(LO)
2550 RC$=PL$+RT$+LA$+RT$+LO$
2560 GOSUB1530
2570 PRINT#8,RC$;
2580 GOSUB1550
2590 GOSUB1540
2600 CLOSE8
2610 I$="":RETURN
2620 :
2630 :
2640 :
2650 REM\ MENU DISPLAY SUB
2660 PRINT" [196][144] DELETE";D$
2670 PRINT" S[144] SORT";S$
2680 PRINT" +[144] NEXT RECORD"
2690 PRINT" -[144] PREVIOUS RECORD"
2700 PRINT" Q[144] QUIT"
2710 PRINT" V[144] VIEW SPECIFIC RECORD"
2720 PRINT" E[144] EDIT DISPLAYED RECORD"
2730 PRINT" I[144] INSERT RECORD"I$
2740 PRINT" C[144] SELECT FILE (A-Z)"
2750 RETURN
2760 :
2770 :
2780 :
2790 :
2800 REM\ DATA INPUT SUB
2810 OPEN8,DN,8,FC$
2820 GOSUB1530:IFE<>50THEN2840
2830 RN=SV:PRINT"THIS RECORD IS NOT PRESENT":FORI=1TO2000:NEXT:CLOSE8:RETURN
2840 INPUT#8,PL$,LA$,LO$:LA=VAL(LA$):LO=VAL(LO$)
2850 GOSUB1540:CLOSE8
2860 RETURN
2870 :
2880 :
2890 :
2900 REM\ INPUT SUB
2910 S$="":CC=0:DP=0:MP=0:SP=0:HM=0:DM=0:SG=1
2920 DEFFNVC(X)=(X>=48ANDX<=57)OR(X=78ORX=83ORX=69ORX=87ORX=58ORX=20ORX=13ORCV=46)
2930 NV=0
2940 FORKI=0TO30
2950 IFKI=0THENPRINT" [146][157]";
2960 IFKI=15THENPRINT" [157]";
2970 GETA$:IFA$<>""THENGOTO2990
2980 NEXTKI:GOTO2940
2990 CV=ASC(A$):IFFNVC(CV)=0THENGOTO2940
3000 IFCV=13ORCV=20THENPRINT" [157]";
3010 IFCV<>13ANDCV<>20THENNV=1:CC=CC+1:PRINTA$;:IFCV<>58THENS$=S$+A$
3020 IFCC=0THENGOTO3060
3030 IFCV<>20THENGOTO3060
3040 FORKI=1TOCC:PRINT"[157]";:NEXT:FORKI=1TOCC:PRINT"[160]";:NEXT:FORKI=1TOCC:PRINT"[157]";:NEXT
3050 GOTO2910
3060 IFCV=58ANDDM=0THENDP=VAL(S$):DM=1:S$="":GOTO2940
3070 IFCV=58ANDDM=1THENMP=VAL(S$):DM=2:S$="":GOTO2940
3080 IFDM=1ANDCV=13THENMP=VAL(S$):S$="":GOTO3130
3090 IFDM=2ANDCV=13THENSP=VAL(S$):S$="":GOTO3130
3100 IFCV=78ORCV=87THENSG=1:CV=58:GOTO3060
3110 IFCV=83ORCV=69THENSG=-1:CV=58:GOTO3060
3120 IFCV=78ORCV=87ORCV=83ORCV=69THENSP=VAL(S$)
3130 IFCV=13AND(DM=1ORDM=2)THENRV=(DP+MP/60+SP/3600)*SG:RETURN
3140 IFCV=13ANDDM=0THENRV=VAL(S$)*SG:RETURN
3150 GOTO2940
3160 :
3170 :
3180 :
3190 REM\ DEGREES-MINUTES-SECONDS SUB
3200 RV=ABS(RV)
3210 DP=INT(RV):MP=60*FNDS(RV):MP=INT(MP+.5):DM=1
3220 RV$=STR$(DP)+"[188]"+STR$(MP)+"'":RETURN
3230 :
3240 :
3250 :
3260 REM\ PARTIAL SCREEN CLEAR
3270 REM KK,KL,KM=STORAGE
3280 REM BL=IS BEGINNING LINE NUMBER
3290 REM NL=NUMBER OF LINES TO CLEAR
3300 KK=PEEK(781):KL=PEEK(782):KM=PEEK(783)
3310 FORI=BLTOBL+NL
3320 POKE781,I:POKE782,0:POKE783,0
3330 SYS65520:SYS59903
3340 NEXT
3350 POKE781,KK:POKE782,KL:POKE783,KM
3360 POKE214,BL:PRINT
3370 RETURN